home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / TPP1SRC.ZIP / TPP1.ASM < prev    next >
Encoding:
Assembly Source File  |  1996-04-30  |  13.9 KB  |  533 lines

  1. ;
  2. ; TPP's official intro (er...) #1  -  (C)1996 TPP Devlopments
  3. ;
  4. ;  NOTE: This sourcecode is now public domain. Please try to learn something
  5. ;        from it and don't just go ripping routines...
  6. ;
  7.  
  8. .286
  9. include wvr.inc
  10. AproxEXESize       equ  <50000>
  11. HorizontalBarSize  equ  <30>
  12. VerticalBarSize    equ  <73>
  13. BarPlotSpeed       equ  <2>
  14. BigCharSizeX       equ  <23>
  15. BigCharSizeY       equ  <23>
  16. SmallCharSizeX     equ  <6>
  17. SmallCharSizeY     equ  <7>
  18. PlotTextOffset     equ  <(320*70)+88>
  19. CursorColor        equ  <31>
  20. TextDelay          equ  <9>
  21. TextDeleteCycles   equ  <(((SmallCharSizeY+2)*11)*320)+(320*70)+88>
  22. BallNumber         equ  <2>
  23. BallColor          equ  <155>
  24. BallSizeXY         equ  <20>
  25. SinesNumber        equ  <30>
  26.                            
  27. segment PCode
  28. assume cs:PCode, ds:PData
  29.  
  30.           include pfiller.inc
  31.           cli
  32.           call Startup              ; Mode 13h, mem allocs, etc, etc.
  33.           cmp [OldVideoMode],0
  34.           je Exit
  35.  
  36. MainLoop: mov ah,1
  37.           int 16h
  38.           jnz MainExit
  39.  
  40.           WVR
  41. ;          RasterTime 33
  42.           call PlotBalls
  43.           call PlotTexts
  44.           call PlotTitle
  45. ;          RasterTime 0
  46.  
  47.           jmp MainLoop
  48.  
  49. MainExit: xor ah,ah
  50.           int 16h
  51.           xor ax,ax                  
  52.           mov al,[OldVideoMode]
  53.           int 10h                    
  54. Exit:     sti
  55.           mov ah,4ch
  56.           int 21h
  57.  
  58. endp
  59.  
  60. proc PlotBalls near
  61.           mov bp,offset BallData      ; Erase old balls
  62.           mov dx,BallNumber
  63. BErsLoop: dec dx
  64.           mov si,bp
  65.           mov di,[si]
  66.           add di,[si+2]
  67.           xor ax,ax
  68.           mov bx,BallSizeXY
  69. BUnPlotY: dec bx
  70.           mov cx,BallSizeXY
  71. ErsLoop:  cmp byte ptr es:[di],BallColor
  72.           jne NoErase
  73.           stosb
  74.           jmp CErase
  75. NoErase:  inc di
  76. CErase:   loop ErsLoop
  77.           add di,320-BallSizeXY
  78.           or bx,bx
  79.           jnz BUnPlotY
  80.           mov di,[si]                 ; DI = X pos (VGA concurrent)
  81.           mov cx,[si+2]               ; CX = Y pos (VGA concurrent)
  82.           mov al,[si+4]               ; AL = X & Y increment
  83.           cmp di,VerticalBarSize+1    ; Check if exceed is done
  84.           jne NoByLft
  85.           xor al,00000010b
  86.           jmp NoByRgt
  87. NoByLft:  cmp di,320-BallSizeXY
  88.           jne NoByRgt
  89.           xor al,00000010b
  90. NoByRgt:  cmp cx,320*HorizontalBarSize
  91.           jne NoByUp
  92.           xor al,00000001b
  93.           jmp NoByDown
  94. NoByUp:   cmp cx,320*(200-BallSizeXY)
  95.           jne NoByDown
  96.           xor al,00000001b
  97. NoByDown: test al,00000010b           ; Add with sign
  98.           jne Sub1
  99.           add di,4
  100. Sub1:     sub di,2
  101.           test al,00000001b
  102.           jne Sub2
  103.           add cx,640*2
  104. Sub2:     sub cx,640
  105.           mov [si],di
  106.           mov [si+2],cx
  107.           mov [si+4],al
  108.           add di,cx
  109.           mov si,offset BallGFX+3     ; Plot balls
  110.           mov bl,BallSizeXY
  111. BallPlot: dec bl
  112.           mov cx,BallSizeXY
  113. BPlLoop:  lodsb
  114.           mov ah,es:[di]
  115.           or ah,ah
  116.           jnz PSkp
  117.           or al,al
  118.           jz PSkp
  119.           mov es:[di],al
  120. PSkp:     inc di
  121.           loop BPlLoop
  122.           add di,320-BallSizeXY
  123.           or bl,bl
  124.           jnz BallPlot
  125.           add bp,5
  126.           or dx,dx
  127.           jz BallEnd
  128.           jmp BErsLoop
  129. BallEnd:  ret
  130. endp
  131.  
  132. proc PlotTexts near
  133.           cmp [TextCycle],0
  134.           jne CText
  135.           cmp [TextDelayCycle],0
  136.           je NoDelay1                  ; Delay needed?
  137.           dec TextDelayCycle
  138.           ret
  139. NoDelay1: cmp [TextErase],(320*69)+88  ; Erasing needed?
  140.           je NoDelay3
  141.           xor ax,ax
  142.           mov di,[TextErase]
  143.           mov cx,((SmallCharSizeX+1)*32)/2
  144.           rep stosw
  145.           mov di,TextDeleteCycles
  146.           sub di,[TextErase]
  147.           add di,(320*70)+88
  148.           mov cx,((SmallCharSizeX+1)*32)/2
  149.           rep stosw
  150.           sub TextErase,320*2
  151.           ret
  152. NoDelay3: cmp byte ptr [ExtraDelay],0
  153.           je NoDelay2                  ; Delay needed?
  154.           dec byte ptr ExtraDelay
  155.           ret
  156. CText:    jmp ContText
  157. NoDelay2: mov byte ptr ExtraDelay,70*3
  158.           mov TextCycle,32*10
  159.           mov TextErase,TextDeleteCycles
  160.           mov TextPlotOffset,PlotTextOffset
  161.           mov TextDelayCycle,70*TextDelay
  162.           mov si,[MessageOffset]
  163.           cmp byte ptr [si],0
  164.           jne NoEnded
  165.           mov si,offset MainMsg
  166.           mov MessageOffset,si
  167.           call LoadTitle
  168. NoEnded:  cmp byte ptr [si],1
  169.           jne ContText
  170.           inc MessageOffset
  171.           call LoadTitle
  172. ContText: mov si,[MessageOffset]
  173.           mov bh,byte ptr [si]
  174.           cmp byte ptr [XVar],0        ; Check if cursor needed
  175.           jne OpCursor
  176.           mov byte ptr XVar,1
  177.           mov al,CursorColor
  178.           mov ah,al
  179.           mov di,[TextPlotOffset]
  180.           mov cx,SmallCharSizeY
  181. CrsrPlt:  stosw                        ; Plot the 6 pixels wide cursor
  182.           stosw
  183.           stosw
  184.           add di,320-SmallCharSizeX
  185.           loop CrsrPlt
  186.           ret
  187. OpCursor: dec TextCycle                ; Wipe cursor and draw char
  188.           mov si,offset SmallFontTable
  189. SScan:    cmp [si],bh                  ; Scan the table
  190.           je SFinded
  191.           add si,3
  192.           jmp SScan
  193. SFinded:  inc si
  194.           mov ax,[si]
  195.           mov si,ax
  196.           mov di,TextPlotOffset
  197.           mov cx,SmallCharSizeY
  198. ChrPlot:  movsw
  199.           movsw
  200.           movsw
  201.           add di,320-SmallCharSizeX
  202.           loop ChrPlot
  203.           dec byte ptr TextLineCounter
  204.           mov bp,[TextPlotOffset]
  205.           add bp,SmallCharSizeX+1
  206.           cmp byte ptr [TextLineCounter],0
  207.           jne StllLine
  208.           sub bp,((SmallCharSizeX+1)*32)-((SmallCharSizeY+2)*320)
  209.           mov byte ptr TextLineCounter,32
  210. StllLine: mov TextPlotOffset,bp
  211.           inc MessageOffset
  212.           mov byte ptr XVar,0
  213.           ret
  214. endp
  215.  
  216. proc PlotTitle near
  217. ; Plots the title with sine wobbling (wipes the old image at the time)
  218.           mov bx,[SineOffset]
  219.           mov ax,85+(320*((HorizontalBarSize-BigCharSizeY)/2))
  220.           mov bp,offset TitleBuffer
  221.           mov dl,BigCharSizeY
  222. PltLp:    dec dl
  223.           mov si,bx
  224.           mov di,[si]
  225.           add di,ax
  226.           mov si,bp
  227.           add ax,320
  228.           mov cx,((BigCharSizeX+1)*9+2)/2
  229.           rep movsw
  230.           mov bp,si
  231.           add bx,2
  232. ContLoop: or dl,dl
  233.           jnz PltLp
  234.           sub bx,(BigCharSizeY*2)-2
  235.           cmp bx,offset SineTable + 62
  236.           jne NoExceed
  237.           mov bx,offset SineTable
  238. NoExceed: mov SineOffset,bx
  239.           ret
  240. endp
  241.  
  242. proc LoadTitle near
  243. ; Loads a title in the main title buffer, starting at the message offset
  244.           mov ax,ds
  245.           mov es,ax
  246.           mov bp,offset TitleBuffer+1
  247.           mov dh,9                    ; Number of chars to add
  248. LoadLoop: dec dh
  249.           mov si,[MessageOffset]
  250.           mov bh,byte ptr [si]
  251.           inc MessageOffset
  252.           mov si,offset BigFontTable
  253. BScan:    cmp [si],bh                 ; Scan the table
  254.           je BFinded
  255.           add si,3
  256.           jmp BScan
  257. BFinded:  inc si
  258.           mov ax,[si]
  259.           mov si,ax
  260.           mov di,bp
  261.           mov dl,BigCharSizeY
  262. PlotLoop: dec dl
  263.           mov cx,(BigCharSizeX-1)/2
  264.           rep movsw
  265.           movsb
  266.           add di,(((BigCharSizeX+1)*9)+2)-BigCharSizeX
  267.           or dl,dl
  268.           jnz PlotLoop
  269.           add bp,BigCharSizeX+1
  270.           cmp dh,0
  271.           jne LoadLoop
  272.           mov ax,0a000h
  273.           mov es,ax
  274.           ret
  275. endp
  276.  
  277.  
  278. proc ExplodeWithLogo near
  279.            mov cx,35                 ; Delay 35/70 second(s)
  280. Delay1:    WVR
  281.            loop Delay1
  282.            mov dx,3c8h               ; White out the screen
  283.            xor al,al
  284.            out dx,al
  285.            mov dx,3c9h
  286.            mov al,63
  287.            mov cx,256 * 3
  288. White:     out dx,al
  289.            loop White
  290.            mov ax,0a000h
  291.            mov es,ax
  292.            mov si,offset GFX1         ; Plot main logo
  293.            mov di,(320*5)+3
  294.            call PlotGFX
  295.            mov si,offset GFX2
  296.            mov di,(320*60)+3
  297.            call PlotGFX
  298.            mov si,offset GFX2
  299.            mov di,(320*115)+3
  300.            call PlotGFX
  301.            mov si,offset GFX3
  302.            mov di,(320*175)+8
  303.            call PlotGFX                ; Now fade in palette
  304.            mov ax,ds
  305.            mov es,ax
  306.            mov di,offset PaletteBuffer
  307.            mov al,63
  308.            mov cx,256 * 3
  309.            rep stosb
  310.            mov byte ptr XVar,64
  311. FadeLoop:  dec byte ptr XVar
  312.            mov ax,ds
  313.            mov es,ax
  314.            mov si,offset PaletteBuffer
  315.            mov di,offset Palette
  316.            mov cx,256 * 3
  317. CmpLoop:   cmpsb
  318.            je Skip
  319.            dec si
  320.            dec byte ptr [si]
  321.            inc si
  322. Skip:      loop CmpLoop
  323.            mov ax,0a000h
  324.            mov es,ax
  325.            WVR
  326.            mov dx,3c8h
  327.            xor al,al
  328.            out dx,al
  329.            mov dx,3c9h
  330.            mov si,offset PaletteBuffer
  331.            mov cx,256 * 3
  332.            rep outsb
  333.            cmp byte ptr [XVar],0
  334.            jne FadeLoop
  335.            mov cx,35                   ; Delay 35/70 second(s)
  336. Delay2:    WVR
  337.            loop Delay2
  338.            mov ax,ds                   ; Fade with title and balls...
  339.            mov es,ax
  340.            mov di,offset PaletteBuffer
  341.            mov al,63
  342.            mov cx,256 * 3
  343.            rep stosb
  344.            mov byte ptr XVar,64
  345. FadeLoop2: dec byte ptr XVar
  346.            mov ax,ds
  347.            mov es,ax
  348.            mov si,offset PaletteBuffer
  349.            mov di,offset Palette
  350.            mov cx,256 * 3
  351. CmpLoop2:  cmpsb
  352.            je Skip2
  353.            dec si
  354.            dec byte ptr [si]
  355.            inc si
  356. Skip2:     loop CmpLoop2
  357.            mov ax,0a000h
  358.            mov es,ax
  359.            WVR
  360.            call PlotBalls
  361.            call PlotTitle
  362.            mov dx,3c8h
  363.            xor al,al
  364.            out dx,al
  365.            mov dx,3c9h
  366.            mov si,offset PaletteBuffer
  367.            mov cx,256 * 3
  368.            rep outsb
  369.            cmp byte ptr [XVar],0
  370.            jne FadeLoop2
  371.            ret
  372. endp
  373.  
  374. proc PlotGFX near
  375.            mov ax,[si]
  376.            add si,2
  377.            mov bl,byte ptr [si]
  378.            inc si
  379.            mov dx,320
  380.            sub dx,ax
  381. PltLoop:   dec bl
  382.            mov cx,ax
  383.            rep movsb
  384.            add di,dx
  385.            or bl,bl
  386.            jnz PltLoop
  387.            ret
  388. endp
  389.  
  390. proc PlotBars near
  391.            mov ax,0a000h
  392.            mov es,ax
  393.            mov bp,320
  394. BrLoop:    mov bx,BarPlotSpeed
  395.            WVR
  396. BrLoop2:   dec bx
  397.            dec bp
  398.            mov al,16                 ; Plot horizontal bar
  399.            mov di,bp
  400.            mov cx,HorizontalBarSize
  401. HLoop:     stosb
  402.            add di,319
  403.            loop HLoop
  404.            cmp bp,199
  405.            ja NoVert                  ; Check and plot horizontal bar
  406.            mov di,bp
  407.            shl di,8
  408.            mov ax,di
  409.            shr di,2
  410.            add di,ax
  411.            mov cx,VerticalBarSize/2
  412.            mov ah,16
  413.            mov al,16
  414.            rep stosw
  415. NoVert:    cmp bx,0
  416.            jne BrLoop2
  417.            cmp bp,0
  418.            jne BrLoop
  419.            ret
  420. endp
  421.  
  422. proc Startup near
  423.            mov ax,PData
  424.            mov ds,ax
  425.            mov ah,4ah                 ; Reduce program memory size
  426.            mov bx,AproxEXESize/16
  427.            int 21h
  428.            mov ah,12h                 ; Search for videosystem
  429.            xor al,al
  430.            mov bl,36h
  431.            int 10h
  432.            cmp al,12h
  433.            jnz NoVGA
  434.            je VgaOk
  435. NoVGA:     mov ah,9h
  436.            mov dx,offset NoVGAMsg
  437.            int 21h
  438.            mov OldVideoMode,0
  439.            ret
  440. VgaOK:     mov ah,0fh
  441.            int 10h
  442.            mov OldVideoMode,al
  443.            mov ax,0013h
  444.            int 10h
  445.            call LoadPalette           ; Initial effects
  446.            call PlotBars
  447.            call LoadTitle
  448.            call ExplodeWithLogo
  449.            ret
  450. endp
  451.  
  452. proc LoadPalette near
  453. ; Loads the 256 palette (DS:[Palette])
  454.            mov ax,ds
  455.            mov es,ax
  456.            mov si,offset Palette + 3  ; Skip first color
  457.            mov dx,3c8h
  458.            mov al,1
  459.            out dx,al
  460.            mov dx,3c9h
  461.            mov cx,255 * 3
  462.            rep outsb
  463.            mov dx,3dah                ; Set background as 254 (black)
  464.            in al,dx
  465.            mov dx,3c0h
  466.            mov al,11h
  467.            out dx,al
  468.            mov al,254
  469.            out dx,al
  470.            mov dx,3dah
  471.            in al,dx
  472.            mov dx,3c0h
  473.            mov al,20h
  474.            out dx,al
  475.            mov cx,64                  ; Fade in first one
  476. FadeLp:    mov si,offset PaletteBuffer
  477.            mov di,offset Palette
  478.            mov dx,3
  479. DecLp:     dec dx
  480.            cmpsb
  481.            je Skp
  482.            dec si
  483.            inc byte ptr [si]
  484.            inc si
  485. Skp:       cmp dx,0
  486.            jne DecLp
  487.            WVR
  488.            mov dx,3c8h
  489.            xor al,al
  490.            out dx,al
  491.            mov dx,3c9h
  492.            mov si,offset PaletteBuffer
  493.            outsb
  494.            outsb
  495.            outsb
  496.            loop FadeLp
  497.            ret
  498. endp
  499. ends PCode
  500.  
  501. segment PData
  502. PaletteBuffer   db (256*3) dup (0)
  503. OldVideoMode    db 0
  504. XVar            db 0
  505. TextLineCounter db 32
  506. TextDelayCycle  dw 70*TextDelay
  507. ExtraDelay      db 70*3
  508. MessageOffset   dw offset MainMsg
  509. SineOffset      dw offset SineTable
  510. TextCycle       dw 32*10
  511. TextErase       dw TextDeleteCycles
  512. TextPlotOffset  dw PlotTextOffset
  513. TitleBuffer     db (((BigCharSizeX+1)*9)+2)*BigCharSizeY dup (16)
  514. TitleWipeTable  dw BigCharSizeY dup (75+(320*((HorizontalBarSize-BigCharSizeY)/2)))
  515. include msg.inc
  516. include palette.inc
  517. include 1gfx.inc
  518. include 2gfx.inc
  519. include 3gfx.inc
  520. include font1.inc
  521. include fonttbl1.inc
  522. include font2.inc
  523. include fonttbl2.inc
  524. include sintbl.inc
  525. include balldata.inc
  526. include ball.inc
  527. ends PData
  528.  
  529. segment PStack para Stack
  530.  db 512 dup (?)
  531. ends
  532. end
  533.